package com.woniuxy.springsecurity.util;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.jwt.JWT;

/**
 * @Author author
 * @Create 2023-09-20 15:52
 */
public class JwtUtil {


    public static final String JWT_KEY="woniuxy";
    public static final String JWT_ISSUER="woniuxyzs";
//    public static final int JWT_EXPIRE_MILLISECOND=1000*60*30;
    public static final int JWT_EXPIRE_MILLISECOND=1000*10;
    public static final int JWT_EXPIRE_MILLISECOND_REFRESH=1000*30;

    //生成token
    public static String createToken(String eid,String ename){
        return JWT
                .create()        //生成token
                .setKey(JWT_KEY.getBytes())   //加密秘钥信息
                .setIssuer(JWT_ISSUER)         //签发人
                .setIssuedAt(DateTime.now())    //指定签发时间
                .setNotBefore(DateTime.now())   //不能早于这个时间
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND,JWT_EXPIRE_MILLISECOND))   //指定实现失效
                .setPayload("eid", eid)       //设置载荷：自定义用户信息
                .setPayload("ename", ename)       //设置载荷：自定义用户信息
                .sign();
    }
    public static String createRereshToken(String eid,String ename){
        return JWT
                .create()        //生成token
                .setKey(JWT_KEY.getBytes())   //加密秘钥信息
                .setIssuer(JWT_ISSUER)         //签发人
                .setIssuedAt(DateTime.now())    //指定签发时间
                .setNotBefore(DateTime.now())   //不能早于这个时间
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND,JWT_EXPIRE_MILLISECOND_REFRESH))   //指定实现失效
                .setPayload("eid", eid)       //设置载荷：自定义用户信息
                .setPayload("ename", ename)       //设置载荷：自定义用户信息
                .sign();
    }


    //获取指定payload
    public static String getEid(String token){
        return  JWT.of(token).getPayload("eid").toString();
    }

    public static String getEname(String token){
        return  JWT.of(token).getPayload("ename").toString();
    }

    //验证是否有效
    public static boolean validate(String token){
        try {
            return JWT.of(token).setKey("woniuxy".getBytes()).verify();
        } catch (Exception e) {
            return false;
        }
    }

    //验证是否过期
    public static boolean isExpire(String token){
        try {
            return !JWT.of(token).setKey("woniuxy".getBytes()).validate(0);
        } catch (Exception e) {
            return true;
        }
    }

}
